/**
 * 系统设置页面的JavaScript功能
 */

// DOM加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 检查用户权限
    checkAdminPermission();
    
    // 初始化侧边栏
    initSidebar();
    
    // 初始化设置导航
    initSettingsNav();
    
    // 初始化表单验证
    initFormValidation();
    
    // 初始化设置保存功能
    initSettingsSave();
    
    // 加载设置数据
    loadSettings();
});

/**
 * 检查用户是否有管理员权限
 */
function checkAdminPermission() {
    // 获取用户信息
    const userInfo = JSON.parse(localStorage.getItem('userInfo') || 'null');
    
    // 如果用户未登录或不是管理员，重定向到登录页
    if (!userInfo || !userInfo.isAdmin) {
        window.utils.showNotification('您没有管理员权限，请使用管理员账号登录', 'error');
        setTimeout(() => {
            window.location.href = '../login.html';
        }, 2000);
    }
}

/**
 * 初始化侧边栏
 */
function initSidebar() {
    // 获取当前页面路径
    const currentPath = window.location.pathname.split('/').pop() || 'dashboard.html';
    
    // 设置当前页面的侧边栏项为激活状态
    const sidebarItems = document.querySelectorAll('.admin-sidebar-item');
    sidebarItems.forEach(item => {
        const link = item.querySelector('a');
        const linkPath = link.getAttribute('href');
        if (linkPath === currentPath) {
            item.classList.add('active');
        } else {
            item.classList.remove('active');
        }
    });
    
    // 获取用户信息并更新侧边栏用户信息
    const userInfo = JSON.parse(localStorage.getItem('userInfo') || 'null');
    if (userInfo) {
        const usernameElement = document.querySelector('.admin-username');
        if (usernameElement) {
            usernameElement.textContent = userInfo.username || '管理员';
        }
    }
}

/**
 * 初始化设置导航
 */
function initSettingsNav() {
    const navItems = document.querySelectorAll('.settings-nav-item');
    const sections = document.querySelectorAll('.settings-section');
    
    // 从URL获取目标设置项（如果有）
    const urlParams = new URLSearchParams(window.location.search);
    const targetFromUrl = urlParams.get('section');
    
    navItems.forEach(item => {
        item.addEventListener('click', function() {
            // 移除所有导航项的active类
            navItems.forEach(navItem => navItem.classList.remove('active'));
            
            // 给当前导航项添加active类
            this.classList.add('active');
            
            // 获取目标设置区域
            const target = this.getAttribute('data-target');
            
            // 隐藏所有设置区域
            sections.forEach(section => section.classList.remove('active'));
            
            // 显示目标设置区域
            document.getElementById(`settings-${target}`).classList.add('active');
            
            // 更新URL，但不刷新页面
            const url = new URL(window.location);
            url.searchParams.set('section', target);
            window.history.pushState({}, '', url);
        });
        
        // 如果URL中有目标设置项，激活对应的导航项
        if (targetFromUrl && item.getAttribute('data-target') === targetFromUrl) {
            item.click();
        }
    });
}

/**
 * 初始化表单验证
 */
function initFormValidation() {
    // 获取所有需要验证的表单
    const forms = document.querySelectorAll('.settings-form');
    
    forms.forEach(form => {
        form.addEventListener('submit', function(e) {
            e.preventDefault();
            
            // 验证表单
            if (validateForm(this)) {
                // 保存设置
                saveSettings(this);
            }
        });
    });
}

/**
 * 验证表单
 * @param {HTMLFormElement} form - 表单元素
 * @returns {boolean} 验证结果
 */
function validateForm(form) {
    let isValid = true;
    
    // 获取所有必填输入框
    const requiredInputs = form.querySelectorAll('input[required], select[required], textarea[required]');
    
    requiredInputs.forEach(input => {
        // 移除之前的错误提示
        const errorElement = input.nextElementSibling;
        if (errorElement && errorElement.classList.contains('form-error')) {
            errorElement.remove();
        }
        
        // 检查是否为空
        if (!input.value.trim()) {
            isValid = false;
            
            // 添加错误提示
            const errorMsg = document.createElement('div');
            errorMsg.className = 'form-error';
            errorMsg.textContent = '此字段不能为空';
            input.parentNode.insertBefore(errorMsg, input.nextSibling);
            
            // 添加错误样式
            input.classList.add('is-invalid');
        } else {
            // 移除错误样式
            input.classList.remove('is-invalid');
        }
    });
    
    // 验证邮箱格式
    const emailInputs = form.querySelectorAll('input[type="email"]');
    emailInputs.forEach(input => {
        if (input.value.trim() && !validateEmail(input.value)) {
            isValid = false;
            
            // 添加错误提示
            const errorMsg = document.createElement('div');
            errorMsg.className = 'form-error';
            errorMsg.textContent = '请输入有效的邮箱地址';
            input.parentNode.insertBefore(errorMsg, input.nextSibling);
            
            // 添加错误样式
            input.classList.add('is-invalid');
        }
    });
    
    return isValid;
}

/**
 * 验证邮箱格式
 * @param {string} email - 邮箱地址
 * @returns {boolean} 验证结果
 */
function validateEmail(email) {
    const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    return re.test(email);
}

/**
 * 初始化设置保存功能
 */
function initSettingsSave() {
    // 获取所有保存按钮
    const saveButtons = document.querySelectorAll('.btn-primary');
    
    saveButtons.forEach(button => {
        if (button.type === 'submit' || button.textContent.trim() === '保存设置') {
            button.addEventListener('click', function(e) {
                // 阻止默认提交行为
                e.preventDefault();
                
                // 获取对应的表单
                const form = this.closest('form');
                
                // 验证并保存设置
                if (validateForm(form)) {
                    saveSettings(form);
                }
            });
        }
    });
    
    // 获取所有重置按钮
    const resetButtons = document.querySelectorAll('.btn-secondary');
    
    resetButtons.forEach(button => {
        if (button.textContent.trim() === '重置') {
            button.addEventListener('click', function() {
                // 获取对应的表单
                const form = this.closest('form');
                
                // 显示确认对话框
                if (window.confirm('确定要重置为默认设置吗？这将丢失所有自定义设置。')) {
                    // 重置表单
                    form.reset();
                    
                    // 重置开关状态
                    const toggles = form.querySelectorAll('.toggle-switch input');
                    toggles.forEach(toggle => {
                        // 根据默认值设置开关状态
                        const defaultChecked = toggle.hasAttribute('checked');
                        toggle.checked = defaultChecked;
                    });
                    
                    // 显示成功通知
                    window.utils.showNotification('设置已重置为默认值', 'success');
                }
            });
        }
    });
}

/**
 * 保存设置
 * @param {HTMLFormElement} form - 表单元素
 */
function saveSettings(form) {
    // 显示加载状态
    const saveButton = form.querySelector('button[type="submit"], .btn-primary');
    const originalText = saveButton.textContent;
    saveButton.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> 保存中...';
    saveButton.disabled = true;
    
    // 收集表单数据
    const formData = new FormData(form);
    const settings = {};
    
    // 将表单数据转换为对象
    for (const [key, value] of formData.entries()) {
        settings[key] = value;
    }
    
    // 处理所有输入元素
    form.querySelectorAll('input, select, textarea').forEach(input => {
        if (input.id) {
            if (input.type === 'checkbox') {
                settings[input.id] = input.checked;
            } else if (input.type !== 'file' && input.type !== 'submit') {
                settings[input.id] = input.value;
            }
        }
    });
    
    // 获取所有开关
    const toggles = form.querySelectorAll('.toggle-switch input');
    toggles.forEach(toggle => {
        // 使用父元素的标题作为键名
        const cardTitle = toggle.closest('.settings-card')?.querySelector('.settings-card-title')?.textContent;
        if (cardTitle) {
            settings[cardTitle.replace(/\s+/g, '-').toLowerCase()] = toggle.checked;
        }
    });
    
    // 获取表单ID作为设置键
    const formId = form.id || form.getAttribute('id');
    const settingsKey = formId || form.getAttribute('data-settings-key') || 'adminSettings';
    
    // 保存到本地存储（实际应该发送到服务器）
    localStorage.setItem(settingsKey, JSON.stringify(settings));
    
    // 模拟保存延迟
    setTimeout(() => {
        // 恢复按钮状态
        saveButton.innerHTML = originalText;
        saveButton.disabled = false;
        
        // 显示成功通知
        window.utils.showNotification('设置已成功保存', 'success');
    }, 800);
}

/**
 * 加载设置数据
 */
function loadSettings() {
    // 获取所有表单
    const forms = document.querySelectorAll('form');
    
    forms.forEach(form => {
        // 获取表单ID作为设置键
        const formId = form.id || form.getAttribute('id');
        const settingsKey = formId || form.getAttribute('data-settings-key') || 'adminSettings';
        
        // 从本地存储获取设置（实际应该从服务器获取）
        const settings = JSON.parse(localStorage.getItem(settingsKey) || '{}');
        
        // 填充表单字段
        for (const key in settings) {
            const element = form.querySelector(`#${key}`);
            if (element) {
                if (element.type === 'checkbox') {
                    element.checked = settings[key];
                } else if (element.type !== 'file' && element.type !== 'submit') {
                    element.value = settings[key];
                }
            }
        }
        
        // 设置开关状态
        const toggles = form.querySelectorAll('.toggle-switch input');
        toggles.forEach(toggle => {
            const cardTitle = toggle.closest('.settings-card')?.querySelector('.settings-card-title')?.textContent;
            if (cardTitle) {
                const toggleKey = cardTitle.replace(/\s+/g, '-').toLowerCase();
                if (settings[toggleKey] !== undefined) {
                    toggle.checked = settings[toggleKey];
                }
            }
        });
    });
    
    // 如果URL中有section参数，激活对应的导航项
    const urlParams = new URLSearchParams(window.location.search);
    const targetSection = urlParams.get('section');
    if (targetSection) {
        const targetNavItem = document.querySelector(`.settings-nav-item[data-target="${targetSection}"]`);
        if (targetNavItem) {
            targetNavItem.click();
        }
    }
}


/**
 * 重置设置为默认值
 * @param {string} formId - 表单ID
 */
function resetSettings(formId) {
    // 获取表单
    const form = document.getElementById(formId);
    
    if (form) {
        // 显示确认对话框
        window.utils.showConfirm(
            '确定要将设置重置为默认值吗？这将丢失所有自定义设置。',
            function() {
                // 重置表单
                form.reset();
                
                // 处理复选框默认值
                form.querySelectorAll('input[type="checkbox"][data-default="true"]').forEach(checkbox => {
                    checkbox.checked = true;
                });
                
                // 移除所有错误提示
                const errorElements = form.querySelectorAll('.form-error');
                errorElements.forEach(element => element.remove());
                
                // 移除所有错误样式
                const invalidInputs = form.querySelectorAll('.is-invalid');
                invalidInputs.forEach(input => input.classList.remove('is-invalid'));
                
                // 保存重置后的设置
                saveSettings(form);
                
                // 显示成功通知
                window.utils.showNotification('设置已重置为默认值', 'success');
            }
        );
    }
}

/**
 * 导出设置
 */
function exportSettings() {
    // 收集所有设置数据
    const allSettings = {};
    
    // 获取所有设置键
    const forms = document.querySelectorAll('.settings-form');
    forms.forEach(form => {
        const settingsKey = form.getAttribute('data-settings-key') || 'adminSettings';
        allSettings[settingsKey] = JSON.parse(localStorage.getItem(settingsKey) || '{}');
    });
    
    // 创建下载链接
    const dataStr = JSON.stringify(allSettings, null, 2);
    const dataUri = 'data:application/json;charset=utf-8,' + encodeURIComponent(dataStr);
    
    const exportFileDefaultName = 'pengzhi-admin-settings.json';
    
    const linkElement = document.createElement('a');
    linkElement.setAttribute('href', dataUri);
    linkElement.setAttribute('download', exportFileDefaultName);
    linkElement.click();
    
    // 显示成功通知
    window.utils.showNotification('设置已导出', 'success');
}

/**
 * 导入设置
 */
function importSettings() {
    // 创建文件输入元素
    const fileInput = document.createElement('input');
    fileInput.type = 'file';
    fileInput.accept = 'application/json';
    
    fileInput.addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (file) {
            const reader = new FileReader();
            
            reader.onload = function(e) {
                try {
                    const settings = JSON.parse(e.target.result);
                    
                    // 保存导入的设置
                    for (const key in settings) {
                        localStorage.setItem(key, JSON.stringify(settings[key]));
                    }
                    
                    // 重新加载页面以应用设置
                    window.utils.showNotification('设置已导入，正在刷新页面...', 'success');
                    setTimeout(() => {
                        window.location.reload();
                    }, 1500);
                    
                } catch (error) {
                    window.utils.showNotification('导入失败：无效的设置文件', 'error');
                }
            };
            
            reader.readAsText(file);
        }
    });
    
    // 触发文件选择对话框
    fileInput.click();
}

/**
 * 初始化备份与恢复功能
 */
function initBackupRestore() {
    // 导出设置按钮
    const exportButton = document.getElementById('export-settings');
    if (exportButton) {
        exportButton.addEventListener('click', exportSettings);
    }
    
    // 导入设置按钮
    const importButton = document.getElementById('import-settings');
    if (importButton) {
        importButton.addEventListener('click', function() {
            // 触发文件选择
            const fileInput = document.getElementById('settings-file-input');
            if (fileInput) {
                fileInput.click();
            }
        });
    }
    
    // 文件选择事件
    const fileInput = document.getElementById('settings-file-input');
    if (fileInput) {
        fileInput.addEventListener('change', importSettings);
    }
}

// 添加全局函数，用于从HTML调用
window.resetSettings = resetSettings;
window.exportSettings = exportSettings;
window.importSettings = importSettings;
window.initBackupRestore = initBackupRestore;